Перейти к основному содержимому

Мини-шпаргалка по Unix

· 6 мин. чтения

С  юниксом я до некоторых пор был в достаточно прохладных отношениях - мы встречались довольно редко, каждый раз у него были новые дистрибутивы и формы. То в университете Солярис удивлял своим UI, то на хостинге каком-то надо покопаться через ssh. В какой-то момент я стал пристальней посматривать за его возможностями, удивляясь популярности. Наконец я поставил все основные дистрибутивы на виртуальные машины. Ленивый Slackware сопротивлялся больше всех. На этом казалось можно было бы и поставить точку в нашем романе. Но теперь я работаю на маке и приходится разбираться основательней. Основное преимущество *никсов это конечно консоль и гибкая обработка файлов и текста из неё.

Итак, есть много основанных на unix систем - Solaris, MacOSX, FreeBSD и в частности Linux, у которого основные дистрибутивы: Debian - Ubuntu, Fedora - Red Hat, Slackware - Suse, Gentoo, Mandriva

Первое с чем столкнётся пользователь терминала это его интерфейс, hotkeys для быстрой работы

TabАвтодополнение пути (для папок и файлов) при навигации
Предыдущая комманда
CtrlCУбить исполняемую программу (Cancel)
CtrlZПереключить вид из программы. Комманды fg, jobs, bg помогают управлять контекстом
QВыход из некоторых программ (как например man - помощи)

Навигация

Теперь основная часть - ходить по файловой системе, будь то локальной или удалённой.

lsсписок файлов и папок
cdперейти в папку
pwdузнать в какой папке я нахожусь
tailбыстрый просмотр конца файла (полезно для логов)
catбыстрый просмотр содержимого файла
tree -d -L 2двух уровневое дерево папок
find . -name *txtпоиск файла по имени
grep "needle" file.txtпоиск по паттерну
whoamiузнать какой я пользователь
uname -aузнать что за ядро (и может дистрибутив)

Файловая структура

Что-бы ходить по файловой системе, надо понимать по какому принципу дерево построено, и хотя в разных дистрибутивах оно немного отличается, стандарт FSSTND такой..

FSSTND СтандартSuse 11Mac OS 10.7Описание
bootmach_kernelФайлы загрузчика. Lilo и образ ядра
tmpprivate/tmpВременные фейлы для бута. Остальным - в /var/tmp
sbinСистемные комманды нужные при буте
binПользовательские комманды нужные при буте
procВиртуальная папка настроек и процессов ядра
devПодключённые устройства
mntVolumesДоступные через файловую систему устройства
libОбщедоступные библиотеки root-уровня
etcprivate/etcКонфигурационные файлы, зависящие от машины
rootprivate/var/rootДомашняя папка главного пользователя
homeДомашние папки остальных пользователей, в том числе ftp, httpd, samba-сервисов
usrCтатичные файлы программ, библиотек, игр, документации, утилит не используемых при загрузке
varprivate/varЧасто меняющиеся файлы - почтовые сообщения, логи, временные файлы
cdrom
opt+
image
lost+found
media
selinux
srvПапка для апача, корень документов вместо htdocs
netмаунт для NFS дисков
privateсюда сгруппированы разные папки для ограничения доступа
coresместо для сохранения дампов памяти при падении.. можно почистить при недостатке места
ApplicationsВсе установленные пользователем приложения
Developer
LibraryОбщедоступные файлы (например шрифты) межпрограммного уровя
Network
System
Usersдомашние папки настоящих пользователей, расширение home

Комбинирование

Удобство синтаксиса юникса как я уже сказал в гибкости, а именно в символах управления, которые используются с несколькими коммандами

|труба - передача данных от одной комманды в другую, например ls -F | grep /
;последовательный запуск комманд, например date;cal
>перенаправление стандартного вывода в файл с перезаписью, например ls / -F > list.txt
>>перенаправление вывода в файл с добавлением в конец

Обработка файлов

mvпереименовывание
rmудаление
rm -rfрекурсивное удаление
catобъединить файлы и выдать в поток
pasteобъекдинить строки файла(-ов)
lnссылка на файл или папку
splitбинарное разделение файла
joinпострочно объединяет два файла по общему слову
cutпострочно (и/или) поколоночное вырезание текста из файла как из матрицы символов
catпоследовательное объединение двух файлов и вывод в терминал (или файл)
sortотсортировать строчки по алфавиту
uniqоставить уникальные строчки

Установка программ

Поскольку *никсы занимаются целым спектром разных задач, следовательно разные дистрибутивы, со своими установщиками. 

ДистрибутивУстановщик пакетов
Gentooemerge
Debianapt-get update
apt-get install ...
dpkg --install
Fedorarpm -ivh ...
yum -y install ...Гляньте также на возможные репозитории
Mandrivaurpm
Slackwareyast, zypper
gzip, lzma

Кроме системных общих установщиков, есть и специфичные под конкретные нужды установщики

  • port install mongodb -  Установщик macports 

  • pear install phpunit/PHPUnit

  • pecl install mongo

  • gem

Текстовые редакторы

ViVimNanoGeditMatePicoEmacs
Ubuntu+++-
Mac OS Lion++-+++
Debian 5+++-+-
Suse 11+-----

vi readme.txt
i - режим редактирования
esc - выход в общий режим
ZZ - сохранить и выйти
" - режим консоли
!q - выход без сохранения
wq - выход с записью

Архиваторы

gunzipраспаковать .gz
bunzip2распаковать .bz2
tar -jxvfраспаковать .tar

Процессы и диагностика

topзапущенные процессы. См. также htop, pstree
netstatоткрытые соединения
например открытые порты в линуксе: netstat -atp | grep -i "listen" или netstat -tupl
на маке: lsof -n -i4TCP | grep LISTEN
lsofоткрытые файлы (например открытые порты в маке: sudo lsof -i -P|grep -i "listen")
killallубить процесс по имени. Иногда приходится убивать точечно (например подвисший mysql) по PID:
kill -9 1566
whereisподсказка где находятся файлы процесса
df -hотчёт о свободной HDD-памяти (в читаемой форме). Что-бы найти большие файлы на сервере:
find . -type f -size +50000k -exec ls -lh {} ; \| awk '{ print $9 ": " $5 }'

| |w|список пользователей в данный момент| |opensnoop|слежка за доступом к файловым указателям|

Работа с серверами

Практически все постоянно работающие программы - демоны находятся в /etc/init.d/ и имеют комманды start, stop, restart. Необходимы права рута для их управления. В некоторых случаях (Fedora) может прийдётся использовать /sbin/service для доступа к ним

sshУдалённое соединение
scpБезопасное сетевое копирование через SSH с одного сервера на другой. Флаг -r делает рекурсивное копирование папок. Например:
scp -r root@example.com:/srv/htdocs/ /home/html_sources/
ab(Apache Bench) - нагрузочное тестирование (например с параметрами -r -c 100 -n 1000)
nc(netcat) - прямое сокет-соединение
rsyncСинхронизация файлов rsync -av -e ssh --progress /local/source user@example.com:remote/target
Apache

На маке апач2 встроен (включается в настройках sharing) и в нём имеет смысл включить .htaccess (см. директиву AllowOverride)

LinuxMac OSX
Запуск/etc/init.d/httpd restart/etc/init.d/apache2 restart/etc/apache2/
/usr/sbin/apachectl restart
/private/etc/apache2/httpd.conf/private/var/log/httpd/access_log
Логи/private/var/log/apache2/access_log
/private/var/log/httpd/access_log
PHP
Suse 11Mac OSX
/etc/php5/apache2/php.ini
/usr/share/php5/
/usr/lib64/php5//private/etc/php.ini
/usr/local/php5/lib/php/extensions/
MySQL

Настройки MySQL по умолчанию используются зашитые (их можно спросить у mysqladmin посмотреть), для перезаписи на свои, надо в /etc положить my.cnf файлик (образец есть в папке support-files). Самые полезные утилиты в bin папке это mysql (прямой консольный доступ к серверу) и mysqldump (для миграции больших баз).

Если вы сидите на маке, но хочется через виртуалку использовать sqlyog, можно расшарить соединение..

CREATE USER 'your_user_id'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL ON your_database_name.* TO your_user_id@'%' IDENTIFIED BY 'your_password';

При быстрой работе с самим сервером наиболее востребованы комманды

SHOW PROCESSLIST;
SHOW DATABASES;
CHECK TABLE;
REPAIR TABLE;

Управление демоном

LinuxMac OSX
/etc/init.d/mysql restart/usr/local/mysql/bin/mysqld_safe
/usr/local/mysql/bin/mysqladmin shutdown

См. также